package Thread;
/**线程终止，并不是一个”强制性的措施“
 * */
public class demo11 {
    public static void main(String[] args) throws InterruptedException {
        Thread t = new Thread(()->{
            //while(t.isInterrupted()) lambda定义在new Thread之前，也是在 Thread t声明之前，因此这里不可以t.
            // lambda中调用的
            System.out.println("t:" + Thread.currentThread().getName());
            while(!Thread.currentThread().isInterrupted()) {
                // Thread.currentThread() 是一个静态方法，哪一个线程调用，获取的就是哪个线程的引用，这里是t
                System.out.println("hello Thread");
                try{
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    /*t.interrupt()中断t线程，线程t执行sleep(1000)，处于阻塞状态，这是被中断抛出InterruptedException*/
                    // throw new RuntimeException(e);
                    // break 立即终止
                    /*注释掉上面的捕获到InterruptedException，什么都不做，继续执行后面的代码
                    * 由于 Thread.sleep(1000) 抛出 InterruptedException 时会清除中断状态标志，
                    * 所以在下一次循环检查 !Thread.currentThread().isInterrupted() 时，条件仍然为 true，
                    * 因此循环不会结束。线程 t 会继续执行循环，打印 "hello Thread" 并再次进入 sleep*/
                }
            }
            System.out.println("t 结束");
        });

        t.start();
        Thread.sleep(3000);
        System.out.println("main 线程尝试终止");
        t.interrupt();
        // 这里是在main方法中调用
        System.out.println("main:"+Thread.currentThread().getName());
    }
}
